/*
 * Mario.cpp
 *
 *  Created on: 17/11/2014
 *      Author: sisop
 */

#include "Mario.h"

namespace std {

Mario::Mario(short int id,
			 unsigned short int idImagen,
			 int posX, int posY, int alto, int ancho,
			 unsigned char tipo,
			 bool vivo,
			 short int vidas,
			 int puntos) : Elemento(id,idImagen, posX, posY, alto, ancho, tipo, vivo){
	this->vidas 	= vidas;
	this->puntos 	= puntos;
	this->inmune	= false;
}

Mario::~Mario() {
	free(this);
}

/* Getters */

short int Mario::getVidas(){
	return this->vidas;
}

int Mario::getPuntos(){
	return this->puntos;
}

//Metodo de creacion
unsigned short int Mario::aparecer(){
	//TODO
	return CONST_UNO;
}

//Metodo de destruccion
unsigned short int Mario::desaparecer(){
	//TODO
	return CONST_UNO;
}

//Metodo de reparacion de ventana.
unsigned short int Mario::consumirMartillo(){
	this->inmune = CONST_TRUE;
	return CONST_CERO;
}

//Metodo de reparacion de ventana.
unsigned short int Mario::sumarPuntos(int puntos){
	this->puntos += puntos;
	return CONST_UNO;
}

bool Mario::isInmune(){
	return this->inmune;
}

void Mario::setInmune(bool inmune){
	this->inmune = inmune;
}

/* Se mueve el offset indicado para cada eje, y actualiza el vidrio dode esta posicionado */
void Mario::moverse(int offsetX, int offsetY){
	//realizo el movimiento por defecto de la clase
	//Si se puede mover horizontal, se mueve.
	if(this->puedoMovermeHorizontalmente(offsetX)){
	        this->posX = this->posX + offsetX;
	}
	//Si se puede mover vertical, se mueve.
	if(this->puedoMovermeVerticalmente(offsetY)){
		this->posY = this->posY + offsetY;
	}
}

/* Metodo para quitarle una vida a felix */
void Mario::restarVida(){
	this->vidas--;

	/* Si se quedo sin vidas lo mato */
	if(this->vidas == CONST_CERO)
		this->vivo = CONST_FALSE;

	/* Ahora lo ubico en las posiciones x,y y de vidrio de inicio de cada uno*/
	if(this->id == CONST_ID_MARIO1){
		this->setPosX(POS_INI_X_MARIO1);
		this->setPosY(POS_INI_Y_MARIO1);
	}else{
		this->setPosX(POS_INI_X_MARIO2);
		this->setPosY(POS_INI_Y_MARIO2);
	}
}
} /* namespace std */
